iT邦幫忙

2023 iThome 鐵人賽

DAY 23
0
Mobile Development

Spring Boot & Android Studio教學系列 第 23

使用 Spring Boot 建置 Firebase 雲端訊息傳遞 (FCM)

  • 分享至 

  • xImage
  •  

FCM介紹

FCM (Firebase Cloud Messaging) 是一個由 Google 開發的雲端訊息傳送服務,用於向移動應用程式、網站和其他應用程式發送即時通知和訊息。

跨平台支援:

可用於Android、iOS和網頁應用程式發送通知。這使開發者能夠透過單一服務來管理跨不同平台的通知。

即時通知:

可以發送即時通知,讓您的應用程式能夠向用戶傳送重要的消息、提醒和更新。

主題訂閱:

支援主題訂閱,允許用戶訂閱特定主題或主題群組。這使得您可以針對特定用戶群體或內容類別發送通知。

數據傳輸:

除了通知之外,FCM 還可以用於傳輸自訂數據給應用程式,這使得應用程式可以實時更新數據,而無需等待用戶打開應用程式。

可靠性:

FCM 設計為高可靠性,確保訊息能夠穩定傳遞,即使在不穩定的網絡環境中也能正常工作。

分段和目標用戶:

您可以使用 FCM 將通知和訊息定向發送給特定用戶分段,這樣可以更精確地達到您的應用程式目標。

整合 Firebase:

FCM 緊密整合了 Firebase 生態系統中的其他服務,如 Firebase Authentication、Firebase Realtime Database 和 Firebase Cloud Firestore。這使得開發者能夠輕鬆地建立全功能的應用程式。

統計和分析:

FCM 提供詳細的統計和分析工具,讓您可以追蹤通知的效果,了解用戶互動和回應。

創建FCM

首先前往Firebase 控制台,並登錄您的 Google 帳戶。

點擊新增專案,然後按照指示設置您的 Firebase 專案。

建立完後長這樣

點擊專案總覽旁邊的齒輪點選專案設定

點選服務帳戶會看見Firebase Admin SDK 點擊產生新的私密金鑰

生成新的私密金鑰是用於授予應用程式或服務對 Firebase 的安全訪問權限。這個私密金鑰是一個 JSON 文件,包含用戶帳戶的憑證信息,允許您的應用程式以應用程式身份對 Firebase 進行驗證和授權

點擊產生金鑰,這時會產生一個json檔給你,要把此json檔放入spring專案裡。

Spring boot架設FCM

添加依賴

<dependency>
  <groupId>com.google.firebase</groupId>
  <artifactId>firebase-admin</artifactId>
  <version>9.2.0</version>
</dependency>

添加私密金鑰

將剛剛下載的私密金鑰.json直接掉到專案裡面

FCM初始化

新增一個FCM的Configuration

@Configuration
@Slf4j
public class FcmConfig {
    @Bean
    public FirebaseApp initializeFirebaseApp() {
        try {
            // 載入Firebase Admin SDK的設定
            FirebaseOptions options = FirebaseOptions.builder()
                    .setCredentials(GoogleCredentials.fromStream(new FileSystemResource("smart-home-firebase-adminsdk.json").getInputStream()))
                    .build();

            // 初始化Firebase App
            FirebaseApp firebaseApp = FirebaseApp.initializeApp(options);
            // 檢查FirebaseApp是否初始化成功
            log.info("FirebaseApp 初始化 成功!");
            // 初始化Firebase App
            return firebaseApp;
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }
}

啟動spring boot 就可以看見

創建請求API

FcmController.java

@RestController
@RequiredArgsConstructor
@RequestMapping("/fcm")
public class FcmController {
    private final FcmService service;

    @PostMapping("/send")
    public void sendNotification(@RequestBody NotificationRequest request) {
        // 發送通知
        service.sendNotification(request);
    }
}

@Builder
@AllArgsConstructor
@NoArgsConstructor
@Data
public class NotificationRequest {
    private String fcm_token;
    private String title;
    private String body;
}

這裡的fcm_token為FCM 裝置標記(token)來識別特定的移動應用程式實例。每當用戶在他們的裝置上安裝您的應用程式,或者當應用程式首次啟動時,您的應用程式可以向 FCM 註冊,並獲得一個唯一的 token。這個 token 與特定用戶和特定裝置相關聯。

FcmService.java

@Service
public class FcmService {
    public void sendNotification(String token, String title, String body) {
        // 初始化 Firebase Messaging
        FirebaseMessaging messaging = FirebaseMessaging.getInstance();
        // 建立要發送的訊息
        Message message = Message.builder()
                .putData("title", title)
                .putData("body", body)
                .setToken(token)
                .build();

        try {
            // 發送通知
            messaging.send(message);
        } catch (FirebaseMessagingException e) {
            e.printStackTrace();
        }
    }
}

這裡無法示範發送通知因為我們沒有用戶端的FCM token
下一篇我們會教如何在Android Studio使用FCM
接收從Spring boot所發送的通知

發送請求類型

向特定設備發送消息

//使用者裝置FCM token
String userToken = "USER_FCM_TOKEN";

Message message = Message.builder()
    .putData("Data1", "hellow")
    .putData("Data2", "world")
    .setToken(userToken)
    .build();

String response = FirebaseMessaging.getInstance().send(message);

向多台設備發送消息

每次傳送最多500個裝置

List<String> userTokens = Arrays.asList(
    "USER_FCM_TOKEN_1",
    // ...
    "USER_FCM_TOKEN_n"
);

MulticastMessage message = MulticastMessage.builder()
    .putData("Data1", "hellow")
    .putData("Data2", "world")
    .addAllTokens(userTokens)
    .build();
BatchResponse response = FirebaseMessaging.getInstance().sendMulticast(message);

訊息類型

通知消息:

通知消息通常包含標題、內容和小圖示,用於在裝置上顯示通知。當應用程式處於前景或背景時,通知消息會自動顯示在裝置上。用戶可以點擊通知以啟動應用程式或執行其他操作。

{
  "message":{
    "token":"bk5RNaTe3H0:CI2q_OOwfIxcDKCIKvvDMEbUdFQ3P1...",
    "notification":{
      "title":"Hello",
      "body":"World"
    }
  }
}

數據消息:

數據消息是純粹的自訂數據,通常不會在裝置上自動顯示通知。您可以使用數據消息來傳遞應用程式需要處理的任何資料。應用程式可以在後台處理這些消息,並根據其中的內容執行操作。

{
  "message":{
    "token":"bk5RNaTe3H0:CI2q_OOwfIxcDKCIKvvDMEbUdFQ3P1...",
    "data":{
      "Home" : "home",
      "Room" : "room",
      "Device" : "device"
    }
  }
}

混合消息:

混合消息結合了通知消息和數據消息的功能。它們包含通知的可見部分,以及自定義數據供應用程式使用。當應用程式處於前景或背景時,通知部分會顯示在裝置上,並且應用程式可以處理自定義數據。

{
  "message":{
    "token":"bk5RNaTe3H0:CI2q_OOwfIxcDKCIKvvDMEbUdFQ3P1...",
    "notification":{
      "title":"Hello",
      "body":"World"
    },
    "data" : {
      "Home" : "home",
      "Room" : "room",
      "Device" : "device"
    }
  }
}

上一篇
掌握Spring Security:Token歷史紀錄與登出(EP5)
下一篇
使用Firebase Cloud Messaging在Android上實現即時通知
系列文
Spring Boot & Android Studio教學30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言